package com.rw.coco.service;

import com.rw.coco.api.data.PersistenceMapper;
import com.rw.coco.api.data.model.AccountModel;
import com.rw.coco.api.data.model.CharacterModel;
import com.rw.coco.util.TransactionUtil;

/**
 * 角色相关方法
 */
public class CharacterService extends BaseService {
    public CharacterService(PersistenceMapper mapper) {
        super(mapper);
    }

    /**
     * 为用户新增一个角色
     *
     * @param accountId 用户ID
     * @return 新增的角色信息
     */
    public CharacterModel insertNewCharacter(String accountId) {
        // 开启事务
        return TransactionUtil.runWithResult(transactionSwitch, () -> {
            // 新增角色，并将用户设置为该角色
            CharacterModel defaultModel = CharacterModel.getDefault(accountId);
            int newCharacterId = characterMapper.insertCharacter(defaultModel);
            accountMapper.setCharacter(accountId, newCharacterId);

            // 主键回填
            defaultModel.setCharacterId(newCharacterId);
            return defaultModel;
        });
    }

    /**
     * 查询用户对应的角色信息
     * 如果用户还没有角色，则新建一个角色
     *
     * @param accountModel 用户信息
     * @return 查询出的角色信息
     */
    public CharacterModel getOrDefault(AccountModel accountModel) {
        CharacterModel character = characterMapper.getCharacter(accountModel.getCharacterId());
        // 如果所用角色为空，则为用户新建角色
        if (character == null) {
            CharacterModel characterModel = insertNewCharacter(accountModel.getAccountId());
            accountModel.setCharacterId(characterModel.getCharacterId());
            return characterModel;
        }
        return character;
    }
}
